package br.com.vemtransporte.negocio;

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
import br.com.vemtransporte.persistencia.RepHorario;
import br.com.vemtransporte.persistencia.RepLinha;
import br.com.vemtransporte.persistencia.RepParada;
import br.com.vemtransporte.persistencia.RepVeiculo;
import br.com.vemtransporte.persistencia.RepositorioPHP;
import br.com.vemtransporte.persistencia.RepConfiguracao;
import br.com.vemtransporte.basicas.Configuracao;
import br.com.vemtransporte.basicas.Horario;
import br.com.vemtransporte.basicas.Linha;
import br.com.vemtransporte.basicas.Parada;
import br.com.vemtransporte.basicas.Usuario;
import br.com.vemtransporte.basicas.Veiculo;
import br.com.vemtransporte.persistencia.RepUsuario;

public class Controlador {

	private RepUsuario repUsuario;
	private Usuario usuarioLogado;
	private RepLinha repLinha;
	private RepParada repParada;
	private RepHorario repHorario;
	private RepVeiculo repVeiculo;
	private ArrayList<Linha> linhas = null;
	Configuracao c = null;
	RepConfiguracao repConfiguracao = null;

	public Controlador() {
		this.repUsuario = new RepUsuario();
		this.repLinha = new RepLinha();
		this.repConfiguracao = new RepConfiguracao();
		this.repParada = new RepParada();
		this.repHorario = new RepHorario();
		this.repVeiculo = new RepVeiculo();
	}

	public Configuracao ProcurarConfiguracaoTodos() throws Exception {
		if (c == null) {
			c = repConfiguracao.procurarConfiguracaoTodos();
			RepositorioPHP.getInstance().setIpServer(c.getIpServer());
			RepositorioPHP.getInstance().setPortaServer(c.getPortaServer());
		}
		return this.c;
	}

	public int cadastrarUsuario(Usuario usuario) throws Exception {
		return repUsuario.cadastrarUsuario(usuario);
	}

	public Usuario logar(String usuario, String senha) throws Exception {
		this.usuarioLogado = repUsuario.logar(usuario, senha);
		return usuarioLogado;
	}

	public void setUsuarioLogado(Usuario usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
	}

	public Usuario getUsuarioLogado() {
		return usuarioLogado;
	}

	public boolean CadastrarLinhaUsuario(Usuario u, Linha l) throws Exception {
		return repUsuario.CadastrarLinhaUsuario(u, l);
	}

	public ArrayList<Linha> ProcurarLinhaTodos() throws Exception {
		if (this.linhas == null) {
			this.linhas = repLinha.ProcurarLinhaTodos();
		}
		return this.linhas;
	}

	public boolean RemoverLinhaUsuario(Usuario u, Linha l) throws Exception {
		return repUsuario.RemoverLinhaUsuario(u, l);
	}

	public ArrayList<Parada> procurarParadasPorLinha(int idLinha)
			throws Exception {
		return repParada.procurarParadasPorLinha(idLinha);
	}

	// metodo verificar e-mail

	public ArrayList<Horario> ProcurarHorarioPorIdLinhaTodos(int idLinha)
			throws Exception {
		return repHorario.ProcurarHorarioPorIdLinhaTodos(idLinha);
	}

	public ArrayList<Linha> ProcurarLinhaHorarioTodos() throws Exception {
		ArrayList<Linha> retorno = null;

		retorno = ProcurarLinhaTodos();

		for (Linha l : retorno) {
			l.setHorarios(repHorario.ProcurarHorarioPorIdLinhaTodos(l.getId()));
		}

		return retorno;
	}

	public void salvar(Usuario u) throws Exception {
		repUsuario.salvar(u);
	}

	public Veiculo procurarTransporteUsuarioMobile(int idLinha)
			throws Exception {
		return repVeiculo.procurarTransporteUsuarioMobile(
				this.usuarioLogado.getId(), idLinha);
	}

}
